NFS服务简单配置

GO

NFS用于在网络上共享存储。举例来说,假如有三台机器A、B和C,它们需要访问同一个目录,且目录中都是图片。传统的做法是把这些图片分别放到A、B、C中,但若使用NFS,只需要把图片放到A上,然后A共享给B和C即可。访问B和C时,是通过网络的方式去访问A上的那个目录的。


1. 服务端配置NFS

1.1. 安装

在CentOS上使用NFS服务需要安装两个包:nfs-utils和rpcbind。在使用yum工具安装nfs-utils时会一并安装rpcbind。如下所示:
yum install -y nfs-utils

说明:

  • 以往的CentOS版本是需要安装protmap包的,从CentOS6开始,就改为安装rpcbind包了。

1.2. 配置

配置NFS比较简单,只需要编辑配置文件/etc/exports。如下所示,是一个非常简单的例子,用来创建一个简单的NFS服务器。

首先,修改配置文件(默认该文件为空),如下所示:

1
2
3
# vim /etc/exports //写入如下内容
/home/nfstestdir 192.168.188.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)

说明:

  • 这个配置文件就一行,共分为三个部分
    • 第一个部分是本地要共享出去的目录
    • 第二个部分是允许访问的主机(可以是一个IP,也可以是一个IP段)
    • 第三个部分是小括号里面的一些权限选项
  • 如上例子所示的这条配置的意义是,要共享的目录为/home/nfstestdir,信任的主机为192.168.188.0/24这个网段,权限为读写,同步模式,下限定所有使用者,并且限定的UID和GID都为1000
  • 关于第三部分的权限选项的说明
    • rw:表示读/写
    • ro:表示只读
    • sync:同步模式,表示内存中的数据实时写入磁盘
    • async:非同步模式,表示把内存中的数据定期写入磁盘
    • no_root_squash:加上这个选项后,root用户就会对共享目录拥有至高的权限控制,就像是对本机的目录操作一样,但这样安全性降低
    • root_squash:与no_root_squash选项相对应,表示root拥护对共享目录的权限不高,只有普通用户的权限,即限制了root
    • all_squash:表示不管使用NFS的用户是谁,其身份都会被限定为一个指定的普通用户身份
    • anonuid/anongid:要和root_squash以及all_squash选项一同使用,用于指定使用NFS的用户被限定后的UID和GID,但前提是本机的/etc/passwd中存在相应的UID和GID

其次,编辑好配置文件后,创建相关目录并启动NFS服务,如下所示:

1
2
3
4
5
# mkdir /home/nfstestdir
# systemctl start rpcbind
# systemctl start nfs
# systemctl enable rpcbind
# systemctl enable nfs

说明:

  • 在启动NFS服务之前,需要先启动rpcbind服务(CentOS的老版本中为portmap])

2. 客户端挂载NFS

假设两台机器的IP分别为192.168.188.128和192.168.188.129。其中提供NFS服务的是192.168.188.128,客户端是192.168.188.129。

在客户端挂载NFS之前,需要查看服务端共享了哪些目录。在客户端(188.129)安装nfs-utils包后,可以使用showmount命令查看(这个命令就是前面的包所带的),如下所示:

1
2
3
# showmount -e 192.168.188.128
Export list for 192.168.188.128:
/home/nfstestdir 192.168.188.0/24

说明:

  • 使用命令showmount -e IP就可以查看NFS的共享情况,这个IP为NFS服务端IP
  • 从上例中可以看到192.168.188.128的共享目录为/home/nfstestdir,信任主机为192.168.188.0/24这个网段。

.
然后在客户端上(188.129)挂载NFS,如下所示:

1
2
3
# mount -t nfs -o nfsvers=3 192.168.188.128:/home/nfstestdir /mnt
# df -h
.......

说明:

  • 使用命令df -h可以看到增加了一个/mnt分区,它就是NFS的共享目录了。
  • -o后面跟挂载选项,如果不加-o nfsvers=3则在挂载目录下的文件属主和属组都是nobody,如果指定 nfsvers=3 则显示UID和GID,所以尽量加上这个选项,避免权限混乱
  • 假如在该NFS的共享目录里面创建文件的权限不够,则需要在客户端中给共享目录相应的权限(如:chmod 777 /home/nfstestdir)
  • 在权限配置正确后,客户端在NFS共享目录里面创建文件即可成功。(在上例配置的情况下,客户端在NFS共享目录里面创建的文件所有者和所属组的UID和GID都为1000)

3. 命令 exportfs

这个命令用于这种情况,当改变NFS的配置文件/etc/exports后,使用该命令挂载而不需要重启NFS服务。

exportfs命令的常用选项为-a、-r、-u和-v,各个选项的含义如下:

常用选项 含义
-a 表示全部挂载或者卸载
-r 表示重新挂载
-u 表示卸载某一个目录
-v 表示显示共享的目录

4. 一个测试实验

下面是关于以上知识的一个实验(从上面的例子中继续试验):

首先修改服务端(188.128)的配置文件,如下所示:

1
2
3
# vi /etc/exports //增加一行:
/tmp/ 192.168.188.0/24(rw.sync,no_root_squash)

然后在服务端(188.128)上执行如下命令:

1
2
3
# exportfs -arv
exporting 192.168.188.0/24:/tmp
exporting 192.168.188.0/24:/home/nfstestdir

在上一节用到了mount命令。用mount命令来挂载NFS服务是有讲究的,它要用-t nfs来指定挂载的类型为nfs。另外在挂载NFS服务时,常用-o nolock选项(即不加锁)。例如在客户端(188.129)上执行如下命令:

1
2
# mkdir /aminglinux
# mount -t nfs -o nolock 192.168.188.128:/tmp /aminglinux/

5. 开机自动挂载NFS(基于上面的实验)

还可以把要挂载的NFS目录写入到客户端上的/etc/fstab文件中,挂载时只需要执行mount -a命令。例如在/etc/fstab文件中增加一行,如下所示:

1
192.168.188.128:/tmp/ /aminglinux nfs defualt,nolock 0 0

由于刚刚已挂载了NFS,需要先卸载,执行如下命令:

1
# umount /aminglinux

然后重新挂载,执行如下命令:

1
mount -a

说明:

  • 这样操作的好处是以后开机会自动挂载NFS。
  • 刚刚挂载的/aminglinux/目录在服务端设置为了no_root_squash,它并不会限制root用户,也就是说使用root用户创建文件时,跟在客户端本机上创建的一样。

OK

0%